package com.mkx.orderedlist;

/**
 * 有序表通用接口
 * @param <K> 键类型，必须实现Comparable接口
 * @param <V> 值类型
 */
public interface OrderedList<K extends Comparable<K>, V> {
    /**
     * 向有序表中插入或更新键值对
     * @param key 键
     * @param value 值
     * @return 如果是更新操作，返回旧值；如果是插入操作，返回null
     */
    V put(K key, V value);
    
    /**
     * 根据键获取值
     * @param key 键
     * @return 对应的值，如果不存在返回null
     */
    V get(K key);
    
    /**
     * 根据键删除键值对
     * @param key 键
     * @return 被删除的值，如果不存在返回null
     */
    V remove(K key);
    
    /**
     * 判断有序表是否包含指定的键
     * @param key 键
     * @return 如果包含返回true，否则返回false
     */
    boolean containsKey(K key);
    
    /**
     * 获取有序表的大小
     * @return 元素个数
     */
    int size();
    
    /**
     * 判断有序表是否为空
     * @return 如果为空返回true，否则返回false
     */
    boolean isEmpty();
    
    /**
     * 清空有序表
     */
    void clear();
    
    /**
     * 获取有序表中的最小键
     * @return 最小键，如果表为空返回null
     */
    K firstKey();
    
    /**
     * 获取有序表中的最大键
     * @return 最大键，如果表为空返回null
     */
    K lastKey();
}